#pragma once

#include <map>
#include <string>
#include <vector>

#include <gl/glew.h>

class Shader{
    public:
        Shader(std::string name, std::vector<std::string> uniformList);

        GLuint GetProgram(){ return program; }

        void Resize(int w, int h);

        void SetUniform(std::string, int numValues, float* value);
        void SetUniform(std::string, int numValues, int* value);
    private:
        GLuint program;
        void LoadProgram();
        void InitialiseMatrixStack();

        std::string name;

        GLint prevProgram;

        std::map<std::string,GLint> uniforms;
};

